The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices that are used in a host of different applications. One such application is in the domain of configuration, which broadly applies to any problem where resources need to be allocated and configured. Examples of common configuration problems include the allocation of facilities at a convention, the layout of chips on a circuit board, and the configuration of a computer product in a computer manufacturing facility. In a configuration environment, there exists the need to determine configuration relationships between any two or more items in order to be able to configure the desired system.
In the past, computers have been programmed with software to solve a variety of different configuration problems. Configuration software has typically been custom-developed according to the specific needs of a particular configuration environment. While the overall performance parameters of different configuration environments may differ considerably, one function that must be performed in all configuration environments is determining the relationships between resources or items. However, the differences in prior art systems have precluded reusing very much code from one configuration environment to the next. Each different configuration application typically has its own custom, dedicated way of determining configuration relations that is not easily adapted to any new or different application. Without a mechanism that can be readily customized and extended to determine configuration relations in a particular configuration environment, the time required to program and maintain configuration software will be excessively long and expensive.